import copy

a=1
b=2

print(a is b)
print(id(a))
print(id(b))


'''
- 可变类型有： 列表、字典、集合
- 不可变类型有： 数字、字符串、元组
字符串、集合、元组、列表、字典,队列、栈、顺序字典都属于可迭代类型
'

                                      
| BaseException             | 所有异常的基类                                   
| SystemExit                | 解释器请求退出                                   
| KeyboardInterrupt         | 用户中断执行(通常是输入^C)                       
| Exception                 | 常规错误的基类                                   
| StopIteration             | 迭代器没有更多的值                               
| GeneratorExit             | 生成器(generator)发生异常来通知退出              
| StandardError             | 所有的内建标准异常的基类                         
| ArithmeticError           | 所有数值计算错误的基类                           
| FloatingPointError        | 浮点计算错误                                     
| OverflowError             | 数值运算超出最大限制                             
| ZeroDivisionError         | 除(或取模)零 (所有数据类型)                      
| AssertionError            | 断言语句失败                                     
| AttributeError            | 对象没有这个属性                                 
| EOFError                  | 没有内建输入,到达EOF 标记                        
| EnvironmentError          | 操作系统错误的基类                               
| IOError                   | 输入/输出操作失败                                
| OSError                   | 操作系统错误                                     
| WindowsError              | 系统调用失败                                     
| ImportError               | 导入模块/对象失败                                
| LookupError               | 无效数据查询的基类                               
| IndexError                | 序列中没有此索引(index)                          
| KeyError                  | 映射中没有这个键                                 
| MemoryError               | 内存溢出错误(对于Python 解释器不是致命的)        
| NameError                 | 未声明/初始化对象 (没有属性)                     
| UnboundLocalError         | 访问未初始化的本地变量                           
| ReferenceError            | 弱引用(Weak reference)试图访问已经垃圾回收了的对
| RuntimeError              | 一般的运行时错误                                 
| NotImplementedError       | 尚未实现的方法                                   
| SyntaxError               | Python 语法错误                                  
| IndentationError          | 缩进错误                                         
| TabError                  | Tab 和空格混用                                   
| SystemError               | 一般的解释器系统错误                             
| TypeError                 | 对类型无效的操作                                 
| ValueError                | 传入无效的参数                                   
| UnicodeError              | Unicode 相关的错误                               
| UnicodeDecodeError        | Unicode 解码时的错误                             
| UnicodeEncodeError        | Unicode 编码时错误                               
| UnicodeTranslateError     | Unicode 转换时错误                               
| Warning                   | 警告的基类                                       
| DeprecationWarning        | 关于被弃用的特征的警告                           
| FutureWarning             | 关于构造将来语义会有改变的警告                   
| OverflowWarning           | 旧的关于自动提升为长整型(long)的警告             
| PendingDeprecationWarning | 关于特性将会被废弃的警告                         
| RuntimeWarning            | 可疑的运行时行为(runtime behavior)的警告         
| SyntaxWarning             | 可疑的语法的警告                                 
| UserWarning               | 用户代码生成的警告                               

'''
'''
关键词
'assert', 'async', 'await',
 'continue',  'except',
 'finally', , 'global',  'lambda',
 'nonlocal',  'raise',  'try', 'with', 'yield'

 continue:满足条件时，跳出本次循环，执行下一次循环
 :return  返回值，并终止函数
 :yield   返回值，不终止函数
 finally  报错不终止函数  必须走finally下的内容
 :raise   自定义报错
 try , except  自定义报错
 except NameError as errorMsg:  

 global   在函数中修改全局变量
    global 变量  ：声明修改全局变量

 nonlocal   在函数中修改嵌套函数变量 （def中的变量）
'''




'''
常用的格式符号
 %s    字符串
 %d    有符号十进制整数
 %f    浮点数
 
 complex  复数
 long     长整型（八进制 十六进制）
'''


'''input 接受多个值'''
# a, b, c = input()
# print(a, b, c)




'''
 //    取整除    返回商的整 数部分 `9//2` 输出结果 4 , `9.0//2.0` 输出结果 4.0
 %     取余      返回除法的余数 `b % a` 输出结果 0                           
 **    指数     `a**b` 为10的20次方， 输出结果 100000000000000000000        
'''

name,age=5,6
print(name)
print(age)


'''
函数参数   def(参数)

*args, **kwargs     任意参数

*args 为元组        例如：name  设name为参数 
**kwargs  为字典    例如：name=1 name默认为1

'''





'''
lambda 匿名函数
reduce(lambda x, y: x+y, [1,2,3,4,5])

四高阶函数 使用方法
'''

#todo \
# map 函数  将列表内的单一元素依次按照函数内方法计算操作
# (使用此函数需使用list()函数)

a=list(map(lambda x: x*2, [1,2,3,4,5]))
print(a)



#todo \
# reduce() 函数会对列表中元素以函数方法进行累积。
from functools import reduce
b=reduce(lambda x,y:x*y,[1,2,3,4,5]) #1*2*3*4*5
print(b)



#todo \
# filter() 通过函数方法对列表进行判断  满足条件的增加到新列表中
# (使用此函数需使用list()函数)


# 格式：filter（判断函数，可迭代对象）
ret = filter(lambda n:n%2==0, [1,2,3,4])#range(1,100)
print(list(ret))



#todo \
# sorted(可迭代对象 , reverse=False升序 , key)
# key  作用于可迭代对象上的每一个元素，并根据key函数返回的结果进行排序
# key=abs (绝对值)

print(sorted([-99,55,66,88],key=abs,reverse=True))



'''
递归函数
'''
def func(n):
    if n==1:  # 给n一个限制
        return 1
    else:
        return n * func(n-1)

print(func(5))
# 5*4*3*2*1


def funccc(n):
    if n==1 or n==2:
        return 1
    else:
        return funccc(n-1) + funccc(n-2)

k=funccc(10)
print(k)

def rabbit1(n):
    f1=1
    f2=1
    if (n==1 or n==2):
        return 1
    else:
        for i in range(3,n+1):
            f1,f2=f2,f1+f2
        return f2


print(rabbit1(10))





#todo \
# 装饰器

def oa(func) :
    def ob(*args,**kwargs):
        print('第一')
        return func(*args,**kwargs)
    return ob


@oa
def fun(a,b,c):
    print('第三')
    print(a)
fun(1,2,3)